home *** CD-ROM | disk | FTP | other *** search
/ Nebula 2 / Nebula Two.iso / SourceCode / MiscKit1.7.1 / MiscKit / Examples / getset / getset next >
Text File  |  1994-12-10  |  11KB  |  406 lines

  1. #!/usr/local/bin/perl
  2. # getset
  3. #
  4. # Copyright (c) 1994 by M. Onyschuk and Associates Inc.
  5. # All Rights Reserved.
  6. #
  7. # HISTORY:
  8. # Thu Mar 17 17:49:30 EST 1994 (MO)
  9. # Starting point.
  10. #
  11. # Fri Mar 18 10:52:34 EST 1994
  12. # Cleaned up code, though a PERL afficionado might argue!
  13. #
  14. # Mon Mar 21 14:25:23 EST 1994 (MO)
  15. # Added class name support
  16. #
  17. # Tue Mar 22 09:52:40 EST 1994 (MO)
  18. # Fixed character string set method to test whether aValue
  19. # is NULL before calling NXCopyStringBufferFromZone.
  20. #
  21. # DESCRIPTION:
  22. # Generates an Objective C persistent class from a list of attribute
  23. # names and types of format:
  24. #
  25. # class-name superclass-name
  26. # attribute-name-1 type-character-1
  27. # attribute-name-2 type-character-2
  28. # ...
  29. #
  30. # type-character may be one of:
  31. #
  32. # s = (const char *)
  33. # i = (int)
  34. # l = (long int)
  35. # f = (float)
  36. # d = (double)
  37. # o = (id)
  38. #
  39.  
  40. eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_]+=)(.*)/ && shift;
  41.             # process any FOO=bar switches
  42.  
  43. sub toupper {
  44. # I know this is probably stupid, but I really couldn't PERL
  45. # my way out of a wet paper bag! This was originally an AWK script -
  46. # but I found I knew even less about AWK than PERL!
  47.     if ($_[0] eq 'a') { return "A"; }
  48.     if ($_[0] eq 'b') { return "B"; }
  49.     if ($_[0] eq 'c') { return "C"; }
  50.     if ($_[0] eq 'd') { return "D"; }
  51.     if ($_[0] eq 'e') { return "E"; }
  52.     if ($_[0] eq 'f') { return "F"; }
  53.     if ($_[0] eq 'g') { return "G"; }
  54.     if ($_[0] eq 'h') { return "H"; }
  55.     if ($_[0] eq 'i') { return "I"; }
  56.     if ($_[0] eq 'j') { return "J"; }
  57.     if ($_[0] eq 'k') { return "K"; }
  58.     if ($_[0] eq 'l') { return "L"; }
  59.     if ($_[0] eq 'm') { return "M"; }
  60.     if ($_[0] eq 'n') { return "N"; }
  61.     if ($_[0] eq 'o') { return "O"; }
  62.     if ($_[0] eq 'p') { return "P"; }
  63.     if ($_[0] eq 'q') { return "Q"; }
  64.     if ($_[0] eq 'r') { return "R"; }
  65.     if ($_[0] eq 's') { return "S"; }
  66.     if ($_[0] eq 't') { return "T"; }
  67.     if ($_[0] eq 'u') { return "U"; }
  68.     if ($_[0] eq 'v') { return "V"; }
  69.     if ($_[0] eq 'w') { return "W"; }
  70.     if ($_[0] eq 'x') { return "X"; }
  71.     if ($_[0] eq 'y') { return "Y"; }
  72.     if ($_[0] eq 'z') { return "Z"; }
  73.     return $_[0];
  74. }
  75.  
  76.  
  77. open(Ivars, ">/tmp/getset.Ivars");
  78. open(Prototypes, ">/tmp/getset.Prototypes");
  79. open(Methods, ">/tmp/getset.Methods");
  80. open(Free, ">/tmp/getset.Free");
  81. open(Read, ">/tmp/getset.Read");
  82. open(Write, ">/tmp/getset.Write");
  83. open(Copy,">/tmp/getset.Copy");
  84.  
  85. while (<>) {
  86.     ($Attribute, $Type) = split(' ', $_, 9999);
  87.  
  88.  
  89.     $setAttribute = sprintf("set%s%s", do toupper(substr($Attribute, 0, 1)), substr($Attribute, 1));
  90.  
  91.  
  92.     if ($ClassName eq '') {
  93.         $ClassName = $Attribute;
  94.     $SuperclassName = $Type;
  95.     }
  96.     
  97.  
  98.     if ($Type eq 's') {
  99.         # Writes the ivar
  100.     printf Ivars "    char *$Attribute;\n";
  101.     
  102.     # Writes the prototype
  103.     printf Prototypes "- (const char *)$Attribute;\n";
  104.     printf Prototypes "- $setAttribute:(const char *)aValue;\n";
  105.     printf Prototypes "\n";
  106.     
  107.         # Writes the method body
  108.     printf Methods "- (const char *)$Attribute\n";
  109.     printf Methods "{\n";
  110.     printf Methods "    return $Attribute;\n";
  111.     printf Methods "}\n\n";
  112.     printf Methods "- $setAttribute:(const char *)aValue\n";
  113.     printf Methods "{\n";
  114.     printf Methods "    NXZone *z = [self zone];\n";
  115.     printf Methods "    if ($Attribute) {\n";
  116.     printf Methods "        NXZoneFree(z, $Attribute);\n";
  117.     printf Methods "    }\n";
  118.     printf Methods "    $Attribute = (aValue) ? NXCopyStringBufferFromZone(aValue, z) : NULL;\n";
  119.     printf Methods "    return self;\n";
  120.     printf Methods "}\n";
  121.     printf Methods "\n";
  122.  
  123.     # Writes the free body
  124.     printf Free "    if ($Attribute) {\n";
  125.     printf Free "        NXZoneFree(z, $Attribute);\n";
  126.     printf Free "        $Attribute = NULL;\n";
  127.     printf Free "    }\n";
  128.  
  129.     # Writes the read: body
  130.     printf Read "    NXReadType(stream, \"*\", &$Attribute);\n";
  131.     
  132.     # Writes the write: body
  133.     printf Write "    NXWriteType(stream, \"*\", &$Attribute);\n";
  134.  
  135.     # Writes the copyFromZone: body
  136.     printf Copy "    if ($Attribute) {\n";
  137.     printf Copy "        copy->$Attribute = NXCopyStringBufferFromZone($Attribute, z);\n";
  138.     printf Copy "    }\n";
  139.     }
  140.  
  141.  
  142.     if ($Type eq 'i') {
  143.         # Writes the ivar
  144.     printf Ivars "    int $Attribute;\n";
  145.     
  146.     # Writes the prototype
  147.     printf Prototypes "- (int)$Attribute;\n";
  148.     printf Prototypes "- $setAttribute:(int)aValue;\n";
  149.     printf Prototypes "\n";
  150.     
  151.         # Writes the method body
  152.     printf Methods "- (int)$Attribute\n";
  153.     printf Methods "{\n";
  154.     printf Methods "    return $Attribute;\n";
  155.     printf Methods "}\n\n";
  156.     printf Methods "- $setAttribute:(int)aValue\n";
  157.     printf Methods "{\n";
  158.     printf Methods "    $Attribute = aValue;\n";
  159.     printf Methods "    return self;\n";
  160.     printf Methods "}\n";
  161.     printf Methods "\n";
  162.  
  163.     # Writes the read: body
  164.     printf Read "    NXReadType(stream, \"i\", &$Attribute);\n";
  165.     
  166.     # Writes the write: body
  167.     printf Write "    NXWriteType(stream, \"i\", &$Attribute);\n";
  168.     }
  169.  
  170.  
  171.     if ($Type eq 'l') {
  172.         # Writes the ivar
  173.     printf Ivars "    long $Attribute;\n";
  174.     
  175.     # Writes the prototype
  176.     printf Prototypes "- (long)$Attribute;\n";
  177.     printf Prototypes "- $setAttribute:(long)aValue;\n";
  178.     printf Prototypes "\n";
  179.     
  180.     
  181.         # Writes the method body
  182.     printf Methods "- (long)$Attribute\n";
  183.     printf Methods "{\n";
  184.     printf Methods "    return $Attribute;\n";
  185.     printf Methods "}\n\n";
  186.     printf Methods "- $setAttribute:(long)aValue\n";
  187.     printf Methods "{\n";
  188.     printf Methods "    $Attribute = aValue;\n";
  189.     printf Methods "    return self;\n";
  190.     printf Methods "}\n";
  191.     printf Methods "\n";
  192.  
  193.     # Writes the read: body
  194.     printf Read "    NXReadType(stream, \"l\", &$Attribute);\n";
  195.     
  196.     # Writes the write: body
  197.     printf Write "    NXWriteType(stream, \"l\", &$Attribute);\n";
  198.     }
  199.  
  200.  
  201.     if ($Type eq 'f') {
  202.         # Writes the ivar
  203.     printf Ivars "    float $Attribute;\n";
  204.     
  205.     # Writes the prototype
  206.     printf Prototypes "- (float)$Attribute;\n";
  207.     printf Prototypes "- $setAttribute:(float)aValue;\n";
  208.     printf Prototypes "\n";
  209.     
  210.         # Writes the method body
  211.     printf Methods "- (float)$Attribute\n";
  212.     printf Methods "{\n";
  213.     printf Methods "    return $Attribute;\n";
  214.     printf Methods "}\n\n";
  215.     printf Methods "- $setAttribute:(float)aValue\n";
  216.     printf Methods "{\n";
  217.     printf Methods "    $Attribute = aValue;\n";
  218.     printf Methods "    return self;\n";
  219.     printf Methods "}\n";
  220.     printf Methods "\n";
  221.  
  222.     # Writes the read: body
  223.     printf Read "    NXReadType(stream, \"f\", &$Attribute);\n";
  224.     
  225.     # Writes the write: body
  226.     printf Write "    NXWriteType(stream, \"f\", &$Attribute);\n";
  227.     }
  228.  
  229.  
  230.     if ($Type eq 'd') {
  231.         # Writes the ivar
  232.     printf Ivars "    double $Attribute;\n";
  233.     
  234.     # Writes the prototype
  235.     printf Prototypes "- (double)$Attribute;\n";
  236.     printf Prototypes "- $setAttribute:(double)aValue;\n";
  237.     printf Prototypes "\n";
  238.     
  239.         # Writes the method body
  240.     printf Methods "- (double)$Attribute\n";
  241.     printf Methods "{\n";
  242.     printf Methods "    return $Attribute;\n";
  243.     printf Methods "}\n\n";
  244.     printf Methods "- $setAttribute:(double)aValue\n";
  245.     printf Methods "{\n";
  246.     printf Methods "    $Attribute = aValue;\n";
  247.     printf Methods "    return self;\n";
  248.     printf Methods "}\n";
  249.     printf Methods "\n";
  250.  
  251.     # Writes the read: body
  252.     printf Read "    NXReadType(stream, \"d\", &$Attribute);\n";
  253.     
  254.     # Writes the write: body
  255.     printf Write "    NXWriteType(stream, \"d\", &$Attribute);\n";
  256.     }
  257.  
  258.  
  259.     if ($Type eq 'o') {
  260.         # Writes the ivar
  261.     printf Ivars "    id $Attribute;\n";
  262.     
  263.     # Writes the prototype
  264.     printf Prototypes "- $Attribute;\n";
  265.     printf Prototypes "- $setAttribute:aValue;\n";
  266.     printf Prototypes "\n";
  267.     
  268.         # Writes the method body
  269.     printf Methods "- $Attribute\n";
  270.     printf Methods "{\n";
  271.     printf Methods "    return $Attribute;\n";
  272.     printf Methods "}\n\n";
  273.     printf Methods "- $setAttribute:aValue\n";
  274.     printf Methods "{\n";
  275.     printf Methods "    [$Attribute free];\n";
  276.     printf Methods "    $Attribute = [aValue copyFromZone:[self zone]];\n";
  277.     printf Methods "    return self;\n";
  278.     printf Methods "}\n\n";
  279.     printf Methods "- %sNoCopy:aValue\n", $setAttribute;
  280.     printf Methods "{\n";
  281.     printf Methods "    [$Attribute free];\n";
  282.     printf Methods "    $Attribute = aValue;\n";
  283.     printf Methods "    return self;\n";
  284.     printf Methods "}\n";
  285.     printf Methods "\n";
  286.  
  287.     # Writes the free body
  288.     printf Free "    if ($Attribute) {\n";
  289.     printf Free "        $Attribute = [$Attribute free];\n";
  290.     printf Free "    }\n";
  291.  
  292.     # Writes the read: body
  293.     printf Read "    $Attribute = NXReadObject(stream);\n";
  294.     
  295.     # Writes the write: body
  296.     printf Write "    NXWriteObject(stream, $Attribute);\n";
  297.  
  298.     # Writes the copyFromZone: body
  299.     printf Copy "    copy->$Attribute = [$Attribute copyFromZone:aZone];\n";
  300.     }
  301. }
  302.  
  303.  
  304. close(Ivars);
  305. close(Prototypes);
  306. close(Methods);
  307. close(Free);
  308. close(Read);
  309. close(Write);
  310.  
  311.  
  312. printf "// Class $ClassName generated using getset 1.1\n";
  313. printf "// Copyright 1994 by M. Onyschuk and Associates Inc.\n";
  314. printf "// All Rights Reserved.\n";
  315. printf "\n";
  316. printf "#import \"$SuperclassName.h\"\n";
  317. printf "\n";
  318. printf "@interface $ClassName:$SuperclassName\n";
  319. printf "{\n";
  320. open(Ivars, "</tmp/getset.Ivars");
  321. while (<Ivars>) {    
  322.     printf "%s",$_;
  323. }
  324. close(Ivars);
  325. printf "}\n";
  326. printf "\n";
  327. printf "- free;\n";
  328. printf "\n";
  329. printf "- read:(NXTypedStream *)aStream;\n";
  330. printf "- write:(NXTypedStream *)aStream;\n";
  331. printf "\n";
  332. printf "- copyFromZone:(NXZone *)aZone;\n";
  333. printf "\n";
  334. open(Prototypes, "</tmp/getset.Prototypes");
  335. while (<Prototypes>) {    
  336.     printf "%s",$_;
  337. }
  338. close(Prototypes);
  339. printf "@end\n";
  340. printf "\n";
  341. printf "#import \"$ClassName.h\"";
  342. printf "\n";
  343. printf "#import <objc/hashtable.h>\n";
  344. printf "\n";
  345. printf "@implementation $ClassName\n";
  346. printf "\n";
  347. printf "- free\n";
  348. printf "{\n";
  349. printf "    NXZone *z = [self zone];\n";
  350. printf "\n";
  351. open(Free, "</tmp/getset.Free");
  352. while (<Free>) {    
  353.     printf "%s",$_;
  354. }
  355. close(Free);
  356. printf "\n";
  357. printf "    return [super free];\n";
  358. printf "}\n";
  359. printf "\n";
  360. printf "- read:(NXTypedStream *)stream\n";
  361. printf "{\n";
  362. printf "    [super read:stream];\n";
  363. printf "\n";
  364. open(Read, "</tmp/getset.Read");
  365. while (<Read>) {    
  366.     printf "%s",$_;
  367. }
  368. close(Read);
  369. printf "\n";
  370. printf "    return self;\n";
  371. printf "}\n";
  372. printf "\n";
  373. printf "- write:(NXTypedStream *)stream\n";
  374. printf "{\n";
  375. printf "    [super write:stream];\n";
  376. printf "\n";
  377. open(Write, "</tmp/getset.Write");
  378. while (<Write>) {    
  379.     printf "%s",$_;
  380. }
  381. close(Write);
  382. printf "\n";
  383. printf "    return self;\n";
  384. printf "}\n";
  385. printf "\n";
  386. printf "- copyFromZone:(NXZone *)aZone\n";
  387. printf "{\n";
  388. printf "    $ClassName *copy = [super copyFromZone:aZone];\n";
  389. printf "\n";
  390. open(Copy, "</tmp/getset.Copy");
  391. while (<Copy>) {    
  392.     printf "%s",$_;
  393. }
  394. close(Copy);
  395. printf "\n";
  396. printf "    return copy;\n";
  397. printf "}\n";
  398. printf "\n";
  399. open(Methods, "</tmp/getset.Methods");
  400. while (<Methods>) {    
  401.     printf "%s",$_;
  402. }
  403. close(Methods);
  404. printf "@end\n";
  405. printf "\n";
  406.